package cn.sjtu.java_base;

import java.nio.charset.StandardCharsets;
import java.util.Locale;

/**
 * @author syo 2319615164@qq.com
 * @description String学习
 * @date 2024/5/18
 * @Copyright syo
 */
public class TestString {
    public static void main(String[] args) {
        
    }

    public void description() {
        // 1. String 类是一个不可变类主要体现在：
        // （1）String的内部结构是private final char value[]。
        // （2）String本身是final修饰的，表明不可被子类继承。

        // 2. String为不可变类的好处：
        // （1）可缓存Hash值。
        // （2）比较安全，包括网络安全和线程安全。
        // （3）可放入常量池，提高复用性和性能。

        // 3. 设计模式
        // （1）享元模式：每次获取字符串时先从共享池中获取。
        // （2）分割等需要改变字符串时，返回新的字符串，而不破坏原来的字符串。
    }

    public void testMethod() {
        String str = "123456";

        // 1. 获取某个索引上的字母
        char ch = str.charAt(0);

        // 2. 判断两个字符串是否相等
        str.equals("123456");

        // 3. 根据正则表达式分割字符串为字符串数组
        String[] strAfterSplit = str.split("3");

        // 4. 根据正则表达式分割字符串为字符串数组，limit表示分割为最多2个元素
        // limit > 0：最多分割 limit - 1 次，多余的部分会作为最后一个数组元素。
        // limit == 0：分割所有匹配项，不保留尾随的空字符串。
        // limit < 0：分割所有匹配项，保留尾随的空字符串。
        "a1b2c3".split("\\d", 2); // [a, b2c3]

        // 5. 将字符串转换为byte数组(建议使用带编码参数的这个)
        byte[] strBytes = str.getBytes(StandardCharsets.UTF_8);

        // 6. 一种确保字符串大小写转换在所有区域设置中都一致的方法
        String lowerCase = str.toLowerCase(Locale.ROOT);
        String upperCase = str.toUpperCase(Locale.ROOT);

        // 7.

    }
}
